package cn.kbyue.security.utils;

import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
import cn.hutool.core.date.DateUnit;

/**
 * 缓存工具类
 *
 * @author xl
 * @date 2020/5/18 20:59
 */
public class CacheLocalUtil {

    private static Cache<String, String> cache = CacheUtil.newFIFOCache(100);

    /**
     *
     * @param key key
     * @param value value
     * @param time 默认1分钟, 单位为秒； 错误数据按 1分钟算
     */
    public static void put(String key, String value, Long time) {
        if (time == null || time < 1) {
            cache.put(key, value, DateUnit.MINUTE.getMillis());
        } else {
            cache.put(key, value, DateUnit.SECOND.getMillis() * time);
        }
    }

    public static String get(String key) {
        if (cache.containsKey(key)) {
            return cache.get(key);
        }
        return null;
    }

    /**
     * 如果存在则获取，并删除；如果没有查询到返回 null
     * @param key key
     * @return data or null
     */
    public static String consume(String key) {
        if (cache.containsKey(key)) {
            String value = cache.get(key);
            cache.remove(key);
            return value;
        }
        return null;
    }

    /**
     * 清除制定 key
     * @param key key
     */
    public static void clear(String key) {
        cache.remove(key);
    }

    public static int size() {
        return cache.size();
    }

}
